
#ifndef _USER_H_
#define _USER_H_

#include <stdint.h>

#include "RingChunk.h"
#include "ChunkManage.h"

typedef uint32_t Uid_T;

#pragma pack(1)

typedef struct {
	Uid_T uid;		//用户ID
	uint32_t stamp1;	//有效期起始时间
	uint32_t stamp2;	//有效期截止时间
	uint8_t count;		//使用次数
	uint8_t used;		//已使用次数
	uint8_t useFlag[2];	//使用计数标志
}User_T;

#pragma pack()

#if 0
extern RingChunk_T formalUserChunk;

/*
查找用户

@uid: 要查找的用户的ID
@user: 指向返回用户记录信息的指针，若为NULL，不返回用户信息。
return：找到用户，返回其index；未找到用户，返回负值。
*/
//int User_Find(Uid_T uid, User_T* user, uint32_t* index);
#define User_Find(dir, uid, user) 	Chunk_Find(&formalUserChunk, dir, uid, user)

/*
读取游标当前位置的用户信息
@user：存储用户信息的指针
return: 读取成功，返回读取的用户信息的大小，否则返回负值。
*/
//int User_Read(User_T* user);
#define User_Read(dir, user)		Chunk_Read(&formalUserChunk, dir, user)

/*
设置用户信息游标
@offset：设置的游标相对偏移量
@flag：起始位置标志
return：当前游标的位置
*/
//uint32_t User_Seek(uint32_t offset, uint8_t flag);
#define User_Seek(offset, flag)		Chunk_Seek(&formalUserChunk, offset, flag)

/*
修改用户信息

@user: 新的用户信息的指针

return: 成功修改返回0，否则返回负数

*/
//int User_Set(User_T* user);
#define User_Set(user)			Chunk_Set(&formalUserChunk, user)

/*
添加用户

@user：添加的用户信息的指针

return: 成功修改返回0，否则返回负数

*/
//int User_Add(User_T* user);
#define User_Add(user)			Chunk_Add(&formalUserChunk, user)

/*
删除用户

@uid：要删除的用户的ID

return: 成功修改返回0，否则返回负数

*/
//int User_Remove(Uid_T uid);
#define User_Remove(uid)		Chunk_Remove(&formalUserChunk, uid)

/*
清除冗余用户信息
*/
//void User_Clean(void);
#define User_Clean()			Chunk_Clean(&formalUserChunk)

/*
删除全部用户
*/
#define User_Clear()			Chunk_Clear(&formalUserChunk)

#endif 

uint8_t User_Used(User_T* user);
int User_DoIncCount(RingChunk_T* chunk, Uid_T uid);
void User_IncreaseCount(RingChunk_T* chunk, uint32_t index, User_T* user);


#endif

